İstisnalar
Java'da istisna (exception), programın normal yürütmesi sırasında ortaya çıkan hataları temsil eden nesnelerdir. Bir istisna, bir hata durumunu tanımlamak ve programın bu hatayı nasıl ele alacağını belirlemek için kullanılır. İstisnalar, programda bir hata durumu meydana geldiğinde, normal yürütme akışından ayrılarak istisna durumunu ele alan özel bir kod bloğuna yönlendirilirler.
Java'da birçok farklı türde istisna vardır. Bunlar arasında:
Kontrol edilen istisnalar: Kodun bir parçası tarafından atılan ve kodun çağrıldığı yerde ele alınması gereken istisnalardır. Örneğin, bir dosya işlemi sırasında dosyanın bulunamaması gibi durumlar kontrol edilen istisna olarak ele alınır.
Kontrol edilmeyen istisnalar: Programın çalışması sırasında ortaya çıkan ve önceden tahmin edilemeyen istisnalardır. Örneğin, bellek yetersizliği, sıfıra bölme hatası gibi durumlar kontrol edilmeyen istisna olarak ele alınır.
Error: Ciddi programlama hatalarının ortaya çıkmasından kaynaklanan istisnalardır. Örneğin,
StackOverflowError
veOutOfMemoryError
gibi hatalar kontrol edilemez ve programın normal yürütmesi sonlandırılır.
Java'da istisna yönetimi için try-catch
blokları kullanılır. try
bloğu içindeki kod, istisna durumlarının meydana gelebileceği kod bloğudur.
Eğer bir istisna oluşursa, catch
bloğu, bu istisna durumunu ele alır ve istisna durumunun tipine göre uygun şekilde işlem yapar.
Aşağıdaki örnek, bir dosyanın okunması sırasında meydana gelebilecek istisna durumlarını ele almak için bir try-catch
bloğu kullanır:
try {
File file = new File("file.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.out.println("Dosya bulunamadı: " + e.getMessage());
}
Yukarıdaki örnekte, File
sınıfı, bir dosyanın okunması için kullanılır. Ancak, dosya bulunamadığında bir FileNotFoundException
istisna durumu oluşabilir. Bu nedenle, try
bloğu içindeki kod, bir catch
bloğu ile çevrelenir ve bu blok, dosya bulunamadığında istisna durumunu ele alır. İstisna durumu, getMessage()
metodu ile alınır ve kullanıcıya bir hata mesajı olarak gösterilir.
İstisna Türleri
Bir programcı olarak, aşağıdaki istisna türlerinin farkında olmalısınız:
ArithmeticException: Matematiksel bir işlemin sonucu sıfıra bölündüğünde veya geçersiz bir aritmetik işlem yapıldığında oluşur.
ArrayIndexOutOfBoundsException: Bir diziye geçersiz bir dizinle erişildiğinde meydana gelir.
ClassNotFoundException: Bir sınıfın yürütme zamanında yüklenememesi durumunda oluşur.
FileNotFoundException: Bir dosya bulunamadığında oluşur.
IOException: Giriş/çıkış işlemleri sırasında oluşabilecek genel bir istisna türüdür.
NullPointerException: Bir nesne referansının null olduğu durumlarda ortaya çıkar.
NumberFormatException: Bir dizeyi sayıya dönüştürme işlemi sırasında bir hata oluştuğunda oluşur.
StringIndexOutOfBoundsException: Bir dizenin geçersiz bir karakter dizinleme işlemi yapılması durumunda oluşur.
Bu istisna türleri, programın normal yürütmesi sırasında oluşabilecek birçok farklı hata durumunu temsil eder. Bu istisnalar, kodunuzda hata durumlarını ele almak için kullanılabilir ve try-catch
blokları aracılığıyla ele alınabilir. Ayrıca, kendi özel istisna türlerinizi de tanımlayabilir ve kullanabilirsiniz.
ArithmeticException
Java'da ArithmeticException, matematiksel bir işlemin geçersiz veya imkansız olduğu durumlarda oluşan bir istisna türüdür. Bu hatanın en yaygın nedeni, bir sayının sıfıra bölünmeye çalışılmasıdır. Örneğin, aşağıdaki kodda bir ArithmeticException
hatası oluşacaktır:
int x = 5;
int y = 0;
int z = x / y; // ArithmeticException: / by zero
Bu örnekte, y
sıfıra eşit olduğu için z
'nin değerini hesaplamak için x
sıfıra bölünmeye çalışılır. Bu, bir ArithmeticException
hatasına neden olur.
Bu hatayı önlemek için, öncelikle bir sayının sıfıra bölünmesini engellemelisiniz. Bu, if
veya try-catch
blokları kullanarak yapılabilir.
int x = 5;
int y = 0;
if (y != 0) {
int z = x / y;
System.out.println(z);
} else {
System.out.println("Sıfıra bölünemez.");
}
ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException hatası, bir dizinin sınırları dışındaki bir indis numarasına erişilmeye çalışıldığında oluşan bir istisna türüdür. Bunun nedeni, geçersiz bir dizin numarasının verilmesidir. Örneğin, aşağıdaki kodda bir ArrayIndexOutOfBoundsException
hatası oluşacaktır:
int[] numbers = {1, 2, 3};
int index = 3;
int value = numbers[index]; // ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
Bu hatayı önlemek için, bir dizide geçerli bir indis numarası kullanmalısınız.
int[] numbers = {1, 2, 3};
int index = 3;
if (index >= 0 && index < numbers.length) {
int value = numbers[index];
System.out.println(value);
} else {
System.out.println("Dizin sınırlarının dışına çıkıldı.");
}
ClassNotFoundException
ClassNotFoundException hatası, bir sınıfın yüklenemediğinde oluşan bir istisna türüdür. Bu hatanın nedeni, sınıfın isminin yanlış yazılması veya yüklenemeyecek bir yerde olmasıdır.
Örneğin, aşağıdaki kodda bir ClassNotFoundException
hatası oluşacaktır:
try {
Class.forName("com.example.MyClass");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Bu hatayı önlemek için, sınıfın doğru bir şekilde derlendiğinden ve yüklenemeyecek bir yerde olmadığından emin olun.
FileNotFoundException
FileNotFoundException hatası, bir dosyanın bulunamaması veya açılmaması durumunda oluşan bir istisna türüdür. Bunun nedeni, bir dosyanın belirtilen yolda veya dizinde mevcut olmaması veya kullanıcının gerekli izinlere sahip olmamasıdır.
try {
File file = new File("my_file.txt");
FileReader reader = new FileReader(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bu hatayı önlemek için, belirtilen dosyanın doğru bir şekilde adlandırıldığından ve yolunun doğru olduğundan emin olun.
IOException
IOException, girdi/çıktı işlemleri sırasında oluşan bir istisna türüdür. Bu istisnalar, bir dosya okunurken veya yazılırken, ağ bağlantısı kurulurken veya veritabanına erişilirken oluşabilir.
try {
FileWriter writer = new FileWriter("my_file.txt");
writer.write("Hello, world!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
Bu hatayı önlemek için, girdi/çıktı işlemlerini yapmadan önce gerekli izinlere sahip olduğunuzdan emin olun.
NullPointerException
NullPointerException, null bir referansa işaret eden bir nesnenin veya dizinin kullanılmaya çalışılması durumunda oluşan bir istisna türüdür.
String str = null;
int length = str.length();
Bu hatayı önlemek için, null bir nesneye veya dizine erişim yapmadan önce, null olmayan bir nesne veya dizinin varlığından emin olun.
NumberFormatException
NumberFormatException, bir dizgeyi sayıya dönüştürmeye çalışırken, geçersiz bir sayı biçimi nedeniyle oluşan bir istisna türüdür.
String str = "abc";
int num = Integer.parseInt(str);
Bu hatayı önlemek için, bir dizgeyi sayıya dönüştürmeden önce, dizenin sayısal bir değer içerip içermediğini kontrol etmelisiniz.
StringIndexOutOfBoundsException
Java'da StringIndexOutOfBoundsException, bir dizge üzerinde bir karakter veya alt diziye erişmeye çalışırken, geçersiz bir dizin veya aralık nedeniyle oluşan bir istisna türüdür.
String str = "example";
char c = str.charAt(10);
Bu hatayı önlemek için, bir dizgede belirli bir karaktere veya alt diziye erişmeden önce, dizinin uzunluğunu kontrol ediniz.